using System;
using System.Collections.Generic;
using System.Text;

namespace BusinessTier
{	
   //The interface  is from the Graph example 
   // provided to us by Peter Quist Christensen 

    public interface IBasicGraph
    {
        ///<summary>
        ///adds a vertex to the graph
        ///PRE: vertex is not in the graph
        ///</summary>
        void AddVertex(Vertex vertex);

        ///<summary>
        ///adds an edge to the (unweighted) graph
        ///PRE (startVertex,endVertex) is not contained in the graph
        ///</summary>
        void AddEdge(Vertex startVertex, Vertex endVertex);

        ///<summary>
        ///determines whether a vertex is in the graph
        ///</summary>
        bool ContainsVertex(Vertex vertex);

        ///<summary>
        ///determines whether two vertices are adjacent
        ///</summary>
        bool IsAdjacent(Vertex startVertex, Vertex endVertex);

        ///<summary>
        ///Returns a list containing all vertices adjancent to vertex.
        ///Must be a list since it should be possible to remove adjacent vertices
        ///</summary>
        IList<Vertex> GetAdjacencies(Vertex vertex);

        ///<summary>
        ///Returns an Enumerator to the collection of vertices
        ///</summary>
        IEnumerator<Vertex> Vertices();

        ///<summary>
        ///determines whether the graph is empty
        ///</summary>
        bool IsEmpty();

        ///<summary>
        ///returns the number of vertices
        ///</summary>
        int GetNoOfVertices();

        ///<summary>
        ///returns the number of edges
        ///</summary>
        int GetNoOfEdges();


        ///<summary>
        ///makes the graph empty
        ///</summary>
        void Clear();
        
        ///<summary>
        ///sets all marks to false, must be called before traversing
        ///</summary>
        void UnMark();

        ///<summary>
        ///prints Depth First travelsal
        ///starting in v
        ///</summary>
        void Dfs(Vertex v);

        ///<summary>
        ///Returns Depth First travelsal in a list
        ///starting i v. Must be called with an empty list
        ///</summary>
        IList<Vertex> Dfs(Vertex v, IList<Vertex> l);

        ///<summary>
        ///prints Breath First travelsal
        ///starting in v
        ///</summary>
        void Bfs(Vertex v);

        ///<summary>
        ///returns Breath First travelsal in a list
        ///starting in v
        ///</summary>
        IList<Vertex> Bfs1(Vertex v);


    }
}
